#include "widget.h"
#include "ui_widget.h"

Widget::Widget(QWidget *parent) :
    QWidget(parent),
    ui(new Ui::Widget)
{
    ui->setupUi(this);
    //创建定时器对象
    timer = new QTimer;
    //设置随机数种子
    srand(time(NULL));
    //设置开始按钮的信号与槽函数
    connect(ui->startbtn,SIGNAL(clicked(bool)),this,SLOT(start()));
    //设置随机数对象的信号与槽函数
    connect(timer,&QTimer::timeout,this,&Widget::getnum);
}

Widget::~Widget()
{
    delete ui;
}
//获取随机数组的函数
void Widget::getzjnum()
{
    for (int i = 0; i < 7; i++)
        {
            if(i != 6)
            {
                int x = (rand() % 33) + 1;
                int t = isSave(zjnum,6,x);
                if (t)
                {
                    i--;
                    continue;
                }
                zjnum[i] = x;
            }
            else
            {
                int x = rand() % 16 + 1;
                zjnum[i] = x;
            }
    }
}

void Widget::getusernum()
{   //获取页面用户输入数据并调用去重函数将其存入用户数组中
    quch(ui->red1->text().toInt(),0);
    quch(ui->red2->text().toInt(),1);
    quch(ui->red3->text().toInt(),2);
    quch(ui->red4->text().toInt(),3);
    quch(ui->red5->text().toInt(),4);
    quch(ui->red6->text().toInt(),5);
    quch(ui->userblue->text().toInt(),6);
}
//去重和限制范围函数unmu为接收用户输入的形参，i 为用户输入数字的序号 方便用做赋值数组的下标
void Widget::quch(int unum,int i)
{       //如果小于1大于33的数，在页面上展示不在范围，并结束函数，不让继续执行
        if(unum < 1 || unum > 33){
            ui->zjtext->setText(QString::number(unum) + "不在输入范围");
            return;
        }
                //将最后一个数进行范围判断
                if(i == 6){
                    if(unum > 16){
                        ui->zjtext->setText(QString::number(unum) + "不在输入范围");
                        return;
                    }
                    usernum[i] = unum;
                }else{
//                    对前六个数进行判断，结束函数并在页面显示
                    int t = isSave(usernum,6,unum);
                    if (t)
                    {
                        ui->zjtext->setText(QString::number(unum) + "重复输入");
                        return;
                    }else{
                        usernum[i] = unum;

                    }
                }

}
//兑奖函数，用用户输入数组和随机的数组进行查找比对，进行开奖
void Widget::duijiang()
{

    for(int i = 0;i < 6;i++){
        for(int j = 0; j < 6;j++){
            if(usernum[i] == zjnum[j]){
                num++;
            }
        }
    }
    if(usernum[6] == zjnum[6]){
        num++;
    }
    switch (num) {
    case 7: ui->zjtext->setText("一等奖2000万");
        break;
    case 6: ui->zjtext->setText("二等奖20万");
        break;
    case 5: ui->zjtext->setText("三等奖1万");
        break;
    case 4: ui->zjtext->setText("四等奖200");
        break;
    case 3: ui->zjtext->setText("五等奖5块");
        break;
    default:
         ui->zjtext->setText("感谢好心人！");
        break;
    }

}
//判断重复函数，1代表有重复，0代表无
int Widget::isSave(int nums[],int len,int tag)
{
        for(int i = 0; i < len; i++)
        {
            if(nums[i] == tag)
            {
                return 1;
            }
        }
        return 0;

}
//获取一个1-33的随机数，并使其返回该数
int Widget::suiji()
{
    int x = rand() % 33 + 1;
    return x;
}

void Widget::start()
{       //使点击开始按钮后，页面显示中奖结果区域显示 开奖中。
        ui->zjtext->setText("开奖中");
        //将用来记录结果得变量和数组都重置，以免下次使用有残留值
        for(int i = 0;i < 7;i++){
            zjnum[i] = 0;
            usernum[i] = 0;
        }
        num = 0;
        //调用获取随机双色球的函数，生成并存入数组中，以备后续取用。
        getzjnum();
        //开启定时器，每80毫秒发一次信号并执行对应的槽函数getnum()
        timer->start(80);

        //调用获取用户输入的号码组 函数
        getusernum();


}

void Widget::getnum()
{
    //定义一个静态局部变量，用于控制定时器执行的次数
    static int i = 0 ;
    //执行30次本函数，并在页面动态展示30次
    if(i<30){
//         qDebug() << suiji() << endl;
    ui->jxred1->setText(QString::number(suiji()));
    ui->jxred2->setText(QString::number(suiji()));
    ui->jxred3->setText(QString::number(suiji()));
    ui->jxred4->setText(QString::number(suiji()));
    ui->jxred5->setText(QString::number(suiji()));
    ui->jxred6->setText(QString::number(suiji()));
    ui->jxblue->setText(QString::number((rand() % 16) + 1));
    }else{
         //在大于三十次后，停止定时器，并使其记录定时器次数的 i 值归零方便下次使用
         timer->stop();
         //在定时器停止后调用兑奖函数，以免过快将结果展示出来
         duijiang();
         i = 0;
         //将存入随机获取的数组中的数取出分别展示在页面上
         ui->jxred1->setText(QString::number(zjnum[0]));
         ui->jxred2->setText(QString::number(zjnum[1]));
         ui->jxred3->setText(QString::number(zjnum[2]));
         ui->jxred4->setText(QString::number(zjnum[3]));
         ui->jxred5->setText(QString::number(zjnum[4]));
         ui->jxred6->setText(QString::number(zjnum[5]));
         ui->jxblue->setText(QString::number(zjnum[6]));
    }
    i++;//定时器次数累加
}
